#include <iostream>
#include <ctime>

using namespace std;

// 递归函数寻找每一个位置点所占的面积
// FIXME: `cl` 的名字不是太好，可以起一个更好懂的名字 
int c1(int** arr, int x , int y, int s=0)
{
    if(arr[x][y]==1){
        //搜过的数字置零防止重复计算
        arr[x][y]=0;
        s=1;
        s+=c1( arr, x, y-1, s);
        s+=c1( arr, x, y+1, s);
        s+=c1( arr, x-1, y, s);
        s+=c1( arr, x+1, y, s);
        //cout<<x<<" "<<y<<" "<<s<<endl;
    }
    else{s=0;}
    return s;
}

int main()
{
    //输入矩阵
    srand((int)time(0));

    int cols,rows;
    int **grid;    // FIXME: 可以考虑使用一维数组来存储二维数组
    cout<<"该数组的行数和列数为"<<endl;
    cin>>rows>>cols;

    //裹上一层0,防止递归访问的时候数组越界
    grid= new int*[rows+2];
    for (int i = 0; i < rows+2; i++){
        grid[i] = new int[cols+2];
    }
    for(int i=0;i<cols+2;i++){
         grid[0][i]=0;
         grid[rows+1][i]=0;
         grid[i][0]=0;
         grid[i][cols+1]=0;
    }
    for(int i = 1; i < rows+1; i++){
        for(int j = 1; j < cols+1; j++){
            grid[i][j]=rand()%2;
        }
    }
    
    //输出
    for(int i = 0; i < rows+2; i++)
    {
        for(int j = 0;j < cols+2 ; j++){
            cout << grid[i][j];
        }
        cout << endl;
    }
    int maxs=0;
    int temp=0;
    for(int i = 1; i < rows+1; i++)
    {
        for(int j = 1;j < cols+1 ; j++){
            temp=c1(grid,i,j);
            maxs=max(temp,maxs);
        }
    }
    
    cout<<"最大面积为"<<maxs<<endl;
    
    return 0;
}

